/**
 * Copyright (c) 2016-2019 九点科技 All rights reserved.
 *
 * http://www.9dyun.cn
 *
 * 版权所有，侵权必究！
 */
package com.dian.modules.inv.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dian.common.utils.PageUtils;
import com.dian.modules.inv.entity.GoodsStockEntity;
import com.dian.modules.inv.poi.vo.GoodsStockExportVO;
import com.dian.modules.inv.poi.vo.GoodsStockInitExportVO;
import com.dian.modules.inv.vo.GoodsStockVO;

import java.util.Map;
import java.util.List;
/**
 * 库存表服务接口类
 *
 * @author xiaolai
 * @email xiaolai@9dyun.cn
 * @date 2019-06-29 15:53:12
 */
public interface GoodsStockService extends IService<GoodsStockEntity> {

    /**
     * 库存表导入
     * @param list
     * @return
     */
    void initImport(List<GoodsStockInitExportVO> list);
    /**
     * 库存表导出
     * @param params
     * @return
     */
    List<GoodsStockInitExportVO> initExport(Map<String, Object> params);
    /**
     * 库存表导出
     * @param params
     * @return
     */
    List<GoodsStockExportVO> exportList(Map<String, Object> params);

    /**
     * 库存表分页
     * @param params
     * @return
     */
    PageUtils queryPage(Map<String, Object> params);


    /**
     * 查询商品库存
     * @param goodsStockVO
     * @return
     */
    GoodsStockEntity queryStockInfo(GoodsStockVO goodsStockVO);

    /**
     * 扣减可售库存(动态条件必须能确定唯一库存记录)
     *
     * @param stockParam
     * @return
     */
    boolean casReduceStock(GoodsStockVO stockParam);

    /**
     * 增加可售库存（动态条件必须能确定唯一库存记录）
     *
     * @param invGoodsStockVO
     * @return
     */
    boolean casIncreaseStock(GoodsStockVO invGoodsStockVO);

    /**
     * 扣减实际库存(动态条件必须能确定唯一库存记录)
     * @return
     */
    boolean casReduceActualStock(GoodsStockVO invGoodsStockVO);


    /**
     * 增加实际库存(动态条件必须能确定唯一库存记录)
     * @return
     */
    boolean casIncreaseActualStock(GoodsStockVO invGoodsStockVO);


    /**
     * 批量查询商品总库存数量
     */
    List<GoodsStockVO> batchQueryGoodsSaleNum(String[] goodsId);

    /**
     * 查询单商品总库存数量
     */
    List<GoodsStockVO> queryGoodsSaleNum(String[] goodsId);
}

